<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>    
    // Go { nAdd:un f out(){} : f get(){}:  }
    // aAO { n:  nAdd :    }
    
    // var nAdd;
    // function out(){
    //     var n = 999;
    //     nAdd = function(){ 
    //         n ++;  
    //         console.log(n)
    //     }
    //     return function(){
    //         console.log(n); 
    //     }
    // }
    // var getN = out();
    // getN();   //999 
    // nAdd();   // 1000
    // getN();   // 1000

    //2、                               // (  function(j){}(i)  )  function(){ j = i   }  
    function test(){
        var arr = [];             // [   ]          
        for(var i=0;i<3;i++){      // i = 0           i = 1       i = 2       i = 3
            (function(j){          // j = 0           j = 1       j = 2
                arr[j] = function(){   // arr[0] = 0  arr[1] = 1  arr[2] = 2
                    console.log(j)
                }
            }(i)) 
        }
        return arr; 
    }
    var myArr = test();
    myArr[0]();  // 0
    myArr[1]();  // 1   
    myArr[2]();  // 2


    //3、
    // function fun(){
    //     var i=1;
    //     return function(){console.log(i++)}
    // }
    // var getFun = fun();
    // getFun(); // 1  i = 2
    // getFun(); // 2  i = 3
    // var i=2;  // 在GO中声明了i = 2 但 aAO中也声明了i 所以没有用到GO中的i
    // getFun(); // 3  i = 4
    // getFun(); // 4  i = 5

    //4、
    // function fn(){
    //     var a = 1;
    //     function b(){
    //         a++;
    //         console.log(a) // 2
    //     }
    //     function c(){
    //         a--;
    //         console.log(a) // 1 
    //     }
    //     a  += 10;          
    //     return [b,c];   //

    // }
    // var arr = fn();
    // arr[0]();  // 12
    // arr[1]();  // 11


    </script>
</body>
</html>